home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / mssqlserver_detect.nasl < prev    next >
Text File  |  2005-03-31  |  6KB  |  183 lines

  1. ##
  2. #
  3. # This script attempts to identify a MS SQL Server 
  4. # by logging with an inexistent user and checking 
  5. # the banner returned by the server
  6. #
  7. # Adapted from mssql_blank_password.nasl by
  8. # Nicolas Gregoire <ngregoire@exaprobe.com>
  9. #
  10. ##
  11.  
  12. if(description)
  13. {
  14.  script_id(10144);
  15.  script_version ("$Revision: 1.17 $");
  16.  script_cve_id("CAN-1999-0652");
  17.  name["english"] = "Microsoft SQL TCP/IP listener is running";
  18.  script_name(english:name["english"]);
  19.  
  20.  desc["english"] = "
  21. Microsoft SQL server is running on this port.
  22.  
  23. You should never let any unauthorized users establish
  24. connections to this service.
  25.  
  26. Solution: Block this port from outside communication
  27.  
  28. Risk factor : Medium";
  29.  
  30.  script_description(english:desc["english"]);
  31.  
  32.  summary["english"] = "Microsoft's SQL TCP/IP listener is running";
  33.  script_summary(english:summary["english"]);
  34.  
  35.  script_category(ACT_GATHER_INFO);
  36.  
  37.  script_copyright(english:"This script is Copyright (C) 2003 Nicolas Gregoire");
  38.  family["english"] = "Windows";
  39.  script_family(english:family["english"]);
  40.  script_dependencie("find_service.nes", "find_service2.nasl");
  41.  
  42.  exit(0);
  43. }
  44.  
  45. include("misc_func.inc");
  46.  
  47. #
  48. # The script code starts here
  49. #
  50.  
  51. pkt_hdr = raw_string(
  52.     0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
  53.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  54.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  55.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  56. );
  57.  
  58.  
  59. pkt_pt2 = raw_string (
  60.     0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x61, 0x30, 0x00, 0x00,
  61.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  62.     0x00, 0x00, 0x00, 0x00, 0x20, 0x18, 0x81, 0xb8, 0x2c, 0x08, 0x03,
  63.     0x01, 0x06, 0x0a, 0x09, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  64.     0x00, 0x00, 0x00, 0x00, 0x73, 0x71, 0x75, 0x65, 0x6c, 0x64, 0x61,
  65.     0x20, 0x31, 0x2e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  66.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  67.     0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  68.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  70.     0x00
  71. );
  72.  
  73. pkt_pt3 = raw_string (
  74.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  75.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  76.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  77.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  78.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  80.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  85.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  92.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  93.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  94.     0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x44,
  95.     0x42, 0x4c, 0x49, 0x42, 0x00, 0x00, 0x00, 0x07, 0x06, 0x00, 0x00,
  96.     0x00, 0x00, 0x0d, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  99. );
  100.  
  101. pkt_lang = raw_string(
  102.     0x02, 0x01, 0x00, 0x47, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
  103.     0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  104.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  105.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  107.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00,
  108.     0x00, 0x03, 0x00, 0x00, 0x00
  109. );
  110.  
  111. function make_sql_login_pkt (username, password)
  112. {
  113.     ulen = strlen(username);
  114.     plen = strlen(password);
  115.     
  116.     upad = 30 - ulen;
  117.     ppad = 30 - plen;
  118.     
  119.     ubuf = "";
  120.     pbuf = "";
  121.     
  122.     nul = raw_string(0x00);
  123.     
  124.     # work around a bug in strtoint
  125.     if(ulen)
  126.     {
  127.         ublen = raw_string(ulen);
  128.     } else {
  129.         ublen = raw_string(0x00);
  130.     }
  131.     
  132.     # work around a bug in strtoint
  133.     if(plen)
  134.     {
  135.         pblen = raw_string(plen);
  136.     } else {
  137.         pblen = raw_string(0x00);
  138.     }  
  139.  
  140.     ubuf = string(username, crap(data:nul, length:upad));
  141.     pbuf = string(password, crap(data:nul, length:ppad));
  142.  
  143.     sql_packet = string(pkt_hdr,ubuf,ublen,pbuf,pblen,pkt_pt2,pblen,pbuf,pkt_pt3);
  144.  
  145.     # returning this as a string is NOT working!
  146.     return sql_packet;
  147. }
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154. function check(port)
  155. {
  156.   if(get_port_state(port))
  157.   {
  158.     soc = open_sock_tcp(port);
  159.     if(soc)
  160.     {
  161.         # this creates a variable called sql_packet
  162.         sql_packet = make_sql_login_pkt(username:"Nessus-Test-User", password:crap(20));
  163.     send(socket:soc, data:sql_packet);
  164.     send(socket:soc, data:pkt_lang);
  165.         r  = recv(socket:soc, length:4096);
  166.     close(soc); 
  167.  
  168.         if("'Nessus-Test-User'" >< r)
  169.         {
  170.                 security_note(port);
  171.         register_service(port:port, proto:"mssql");
  172.         return(1);
  173.         }
  174.  
  175.     }
  176.  }
  177. }
  178.  
  179.  
  180. check(port:1433);
  181. port = get_kb_item("Services/unknown");
  182. if (port && (port != 1433) ) check(port:port);
  183.